package sifeap.pl.servlet.convenios;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.MimetypesFileTypeMap;
import javax.imageio.ImageIO;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sifeap.bl.ejb.convenios.ConvenioBLLocal;
import sifeap.entities.convenios.Convenio;
import sifeap.entities.gestionarchivos.valueobject.GestionArchivoVO;
import sifeap.util.Util;

/**
 * Servlet para obtener las imagenes de los convenios
 */
@WebServlet(urlPatterns = { "/ImagenConvenioServlet" })
public class ImagenConvenioServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ImagenConvenioServlet() {
		super();
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String idConvenio = request.getParameter("idconvenio");
		OutputStream outputStream = null;
		InputStream inputStream = null;
		
		try {
			if (idConvenio != null && idConvenio.trim().length() > 0) {
				ConvenioBLLocal convenioBL = (ConvenioBLLocal) new InitialContext().lookup("java:global/SifeapEAR/SifeapEJB/ConvenioBL!" + ConvenioBLLocal.class.getName());
				Convenio convenio = convenioBL.buscar(Long.parseLong(idConvenio));

				String nombreImagen = convenio.getImagen();

				if (!(nombreImagen != null && nombreImagen.trim().length() > 0)) {
					// El convenio no tiene imagen adjunta

					// Se crea una imagen 1 x 1 transparente
					BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
					Graphics2D graphics2D = image.createGraphics();
					graphics2D.setColor(new Color(255, 255, 255)); // Ajusta el color
					graphics2D.fillRect(0, 0, 1, 1); // Crea un cuadrado que llena toda el area
					graphics2D.dispose();
					
					response.setContentType("image/jpeg");
					outputStream = response.getOutputStream();

					ImageIO.write(image, "jpeg", outputStream);
				} else {
					// Si tiene imagen
					String rutaImagen = Util.obtenerValorParametro(GestionArchivoVO.PARAMETRO_UBICACION_CONVENIOS);

					if (!rutaImagen.endsWith(File.separator)) {
						rutaImagen = rutaImagen.concat(File.separator);
					}

					rutaImagen = rutaImagen.concat(nombreImagen);

					File archivoImagen = new File(rutaImagen);
					
					String tipoContenido = new MimetypesFileTypeMap().getContentType(archivoImagen);
					
					response.setContentType(tipoContenido);
					
					outputStream = response.getOutputStream();
					
					inputStream = new FileInputStream(archivoImagen);

					int read = 0;
					byte[] bytes = new byte[1024];
					while ((read = inputStream.read(bytes)) != -1) {
						outputStream.write(bytes, 0, read);
					}
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (inputStream != null) {
				try { inputStream.close(); } catch (Exception e1) {}
			}
			
			try { outputStream.close(); } catch (Exception e2) {}
		}

	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
